import 'package:shared_preferences/shared_preferences.dart';

/// 存储的key
class StorageKey {
  static const String token = 'token';

  // 是否记住密码
  static const String rememberPassword = 'remember_password';

  // 是否自动登录
  static const String autoLogin = 'auto_login';

  // 记住账号
  static const String loginAccount = 'login_account';

  // 记住密码
  static const String loginPassword = 'login_password';

  // 首页查询的历史记录
  static const String homeSearchHistory = 'home_search_history';

  // 菜单记录缓存
  static const String menuList = 'menu_list';

  // 用户信息
  static const String userInfo = 'user_info';

  // 用户个人信息
  static const String userPersonalInfo = 'user_personal_info';

  // 公司名称
  static const String companyName = 'companyName';

  // 标记用户是否刚刚注销
  static const String isLoggedOut = 'is_logged_out';
}

/// 本地存储工具类
class StorageUtil {
  // 获取 SharedPreferences 实例
  static Future<SharedPreferences> _getPrefs() async {
    return await SharedPreferences.getInstance();
  }

  // 存储字符串数据
  static Future<void> setString(String key, String value) async {
    final prefs = await _getPrefs();
    await prefs.setString(key, value);
  }

  // 读取字符串数据
  static Future<String?> getString(String key) async {
    final prefs = await _getPrefs();
    return prefs.getString(key);
  }

  // 删除指定的键
  static Future<void> remove(String key) async {
    final prefs = await _getPrefs();
    await prefs.remove(key);
  }

  // 清除所有存储的数据
  static Future<void> clear() async {
    final prefs = await _getPrefs();
    await prefs.clear();
  }

  // 存储整数数据
  static Future<void> setInt(String key, int value) async {
    final prefs = await _getPrefs();
    await prefs.setInt(key, value);
  }

  // 读取整数数据
  static Future<int?> getInt(String key) async {
    final prefs = await _getPrefs();
    return prefs.getInt(key);
  }

  // 存储布尔数据
  static Future<void> setBool(String key, bool value) async {
    final prefs = await _getPrefs();
    await prefs.setBool(key, value);
  }

  // 读取布尔数据
  static Future<bool?> getBool(String key) async {
    final prefs = await _getPrefs();
    return prefs.getBool(key);
  }

  // 存储双精度浮点数数据
  static Future<void> setDouble(String key, double value) async {
    final prefs = await _getPrefs();
    await prefs.setDouble(key, value);
  }

  // 读取双精度浮点数数据
  static Future<double?> getDouble(String key) async {
    final prefs = await _getPrefs();
    return prefs.getDouble(key);
  }

  // 存储字符串列表数据
  static Future<void> setStringList(String key, List<String> value) async {
    final prefs = await _getPrefs();
    await prefs.setStringList(key, value);
  }

  // 读取字符串列表数据
  static Future<List<String>?> getStringList(String key) async {
    final prefs = await _getPrefs();
    return prefs.getStringList(key);
  }
}
